package com.android.thought.badboys.Alarm;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Random;

import org.json.JSONArray;
import org.json.JSONObject;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.util.Log;

import com.android.thought.badboys.Model;
import com.android.thought.badboys.SharedPreferenceUtil;

public class AlarmReceive extends BroadcastReceiver {
	
	@Override
	public void onReceive(Context context, Intent intent) {
		if( intent == null )
			return;
		
		int ids = intent.getIntExtra("DATA", -1);
		if ( ids == -1 ) 
			return;
		
		
		Calendar calendat = Calendar.getInstance();
		
		String todayKey  = new SimpleDateFormat("yyyy-MM-dd").format(calendat.getTime());
		
		SharedPreferenceUtil.getInstance(context);
		HashSet<String> set = new HashSet<String>();
		
		set = (HashSet<String>) SharedPreferenceUtil.getValue(SharedPreferenceUtil.PREF_INTRO_MESSAGE_HISTORY, set);
		
		calendat.set(Calendar.HOUR_OF_DAY, 12);
		calendat.set(Calendar.MINUTE, 00);
		calendat.set(Calendar.SECOND, 00);
		
		long time12Clock = calendat.getTimeInMillis();
		
		
		try {
			boolean search = false;
			
			// 순차적으로 저장된 Hash  검색.
			for (String jsonValue : set) {
				JSONObject jsonObj = new JSONObject(jsonValue);
				
				String date = jsonObj.getString("DATE");
				
				// 1차 날짜 키로 검색..
				if ( date != null && date.equals(todayKey) ) { 
					// 현재 날짜의 데이터 목록이 존재 한다.
					search = true;
					
					JSONArray array = jsonObj.getJSONArray("ARRAY");
					
					boolean isSend = false;
					
					if ( array != null ) { 
						for ( int arrayIndex =0; arrayIndex < array.length(); arrayIndex++) {
							int tempId = (Integer) array.get(arrayIndex);
							
							if ( tempId == ids ) {
								// 오늘 날짜로 발송 된 문자가 있기 때문에 발송하지 않는다.
								// PASS
								isSend = true;
								break;
							} 
						}
					}
					
					if ( !isSend ) {
						Log.e("CH_DEBUG", "######### ID : " + ids + " TYPE :  문자 발송 해주고 .. 히스토리에 기억  ...  다음 발송 요청 ");
						// 문자 발송 해주고 .. 히스토리에 기억.
						
						array.put(ids);
						
						set.remove(jsonValue);
						set.add(jsonObj.toString());
						
						// 저장
						SharedPreferenceUtil.put(SharedPreferenceUtil.PREF_INTRO_MESSAGE_HISTORY, set);
						
						// 문자 발송처리.
						sendMessage(context , ids, time12Clock, true);
					} else  {
						Log.d("CH_DEBUG", "######### ID : " + ids + " TYPE : 이미발송 문자가 있다...  다음 발송 요청" );
						// 문자 발송처리.
						sendMessage(context , ids, time12Clock, false);
					}
					
					break;
				}
			}
			
			if ( search ) {
				// 이전 날짜 항목이 존재 한다.
				Log.d("CH_DEBUG", "######### ID : " + ids + " TYPE : 이전 날짜 항목이 존재 하지만 아무것도 안한다." );
			} else {
				// 존재 하지 않는다.
				Log.d("CH_DEBUG", "######### ID : " + ids + " TYPE : 존재 하지 않는다. .. 히스토리에 기억 ...  다음 발송 요청  " );
				JSONObject newJsonObj = new JSONObject();
				newJsonObj.put("DATE", todayKey);
				
				JSONArray newArray = new JSONArray();
				newArray.put(ids);
				
				newJsonObj.put("ARRAY", newArray);
				
				set.add(newJsonObj.toString());
				
				// 저장
				SharedPreferenceUtil.put(SharedPreferenceUtil.PREF_INTRO_MESSAGE_HISTORY, set);
				
				// 문자 발송처리.
				sendMessage(context , ids, time12Clock, true);
			}
		}catch (Exception e) { 
			
			Log.e("CH_DEBUG", "############### ERROR :  " + e.toString());
			
		}
	}
	
	public void sendMessage(Context context, int num, long time12, boolean messageSend) {
		boolean isPysh = SharedPreferenceUtil.getValue(SharedPreferenceUtil.PREF_INTRO_USER_AUTO_MESSAGE, false);
		
		if ( isPysh ) {
			AlarmServices servier = Model.getAlarmServicesInstance(context);
			final Random random = new Random(1000);
			long sendTime = time12 + ( 12 * 60 * 60 * 1000 * 2 ) + (random.nextInt(60) * 60 * 1000);
	    
			servier.onSingleRegister(num, sendTime);
	
			if ( messageSend ) {
				SmsManager mSmsManager = SmsManager.getDefault(); 
				String temp = Integer.toString(num);
			    mSmsManager.sendTextMessage(temp.charAt(0) == '0'  ? temp : "0"+temp, null, "음흐흐흐흐...테스트 코드???", null, null);
			}
		}
	}

}
